
package edu.upn.sigemfi.plt.beans;

import edu.upn.sigemfi.plt.bc.ChequeraDelegate;
import edu.upn.sigemfi.plt.bc.CuentaDelegate;
import edu.upn.sigemfi.plt.bc.SolicitudChequeraDelegate;
import edu.upn.sigemfi.plt.be.Chequera;
import edu.upn.sigemfi.plt.be.Cuenta;
import edu.upn.sigemfi.plt.be.SolicitudChequera;
import edu.upn.sigemfi.plt.be.TipoChequera;
import edu.upn.sigemfi.plt.be.TipoCuenta;
import edu.upn.sigemfi.plt.be.TipoTipoCuenta;
import java.util.List;
import javax.faces.model.SelectItem;
import edu.upn.sigemfi.seg.beans.AbstractController;

/**
 *
 * @author Administrador
 */
public class ChequeraController extends AbstractController{

    private ChequeraDelegate chequeraDelegado;
    private CuentaDelegate cuentaDelegado;
    private SolicitudChequeraDelegate solicitudChequeraDelegado;
    private Chequera chequera;
    private Cuenta cuentaAAgregar;
    private SolicitudChequera solicitudChequeraAAgregar;
    private List<SolicitudChequera> listaSolicitudChequeras;
    private List<Cuenta> listaCuentas;
    private boolean bolAgregarCuenta;
    private boolean bolAgregarSolicitudChequera;
    private TipoCuenta tipoCuenta;
    private TipoTipoCuenta tipoTipoCuenta;

    public ChequeraController() {
        chequeraDelegado = new ChequeraDelegate();
        cuentaDelegado= new CuentaDelegate();
        solicitudChequeraDelegado = new SolicitudChequeraDelegate();
        tipoCuenta = new TipoCuenta();
        try {
            listaCuentas = cuentaDelegado.listar();
            listaSolicitudChequeras = solicitudChequeraDelegado.listar();
        } catch (Exception e) {

        }
        bolAgregarSolicitudChequera = false;
        bolAgregarCuenta = false;
    }

    public String cancelar() {
        return "listar";
    }

    public String index() {
        return "index";
    }

    public String chequera(){
        return "chequera";
    }

    public String mostrar(){
        return "mostrar";
    }

    public String listar() {
        return "listar";
    }

    public String editar() {
        return "editar";
    }

    public String nuevo(){
        chequera = new Chequera();
        
        return "nuevo";
    }

    public String registrar(){
        try {
            chequeraDelegado.crear(chequera);
            info("La Chequera se Creó Correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        bolAgregarCuenta = false;
        bolAgregarSolicitudChequera = false;
        return "listar";
    }

    public String actualizar(){
        try {
            chequeraDelegado.editar(chequera);
            info("La Chequera se Actualizó Correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "listar";
    }

    public String eliminar(){
        try {
            chequeraDelegado.eliminar(chequera);
            info("La Chequera se Eliminó Correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }

    public Chequera buscar(Long codigo){
        try {
            return chequeraDelegado.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public List<Chequera> getChequeras(){
        try {
            return chequeraDelegado.listar();
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public SelectItem[] getTipoChequeras(){
        TipoChequera[] tipoChequera = TipoChequera.values();

        SelectItem[] select = new SelectItem[tipoChequera.length];

        int i=0;
        for(TipoChequera tc : tipoChequera){
            select[i++] = new SelectItem(tc, tc.toString());
        }
        return select;
    }

    public SelectItem[] getCuenta(){
        SelectItem[] selects = null;
        try {
            selects = new SelectItem[listaCuentas.size()];
            int i = 0;
            for (Cuenta c : listaCuentas) {
                selects[i++] = new SelectItem(c, c.getNroCuenta());
            }
        } catch (Exception e) {
            selects = new SelectItem[1];
            selects[0] = new SelectItem(null, "Error al momento de consultar la Cuenta");
            System.out.println(e.getMessage());
            error(e.getMessage());
        }
        return selects;
    }

    public SelectItem[] getSolicitudChequera(){
        SelectItem[] selects = null;
        try {
            selects = new SelectItem[listaSolicitudChequeras.size()];
            int i=0;
            for(SolicitudChequera sch : listaSolicitudChequeras){
                selects[i++] = new SelectItem(sch, String.valueOf(sch.getIdSolicitudChequera()));
            }
        } catch (Exception e) {
            selects = new SelectItem[1];
            selects[0] = new SelectItem(null, "Error al momento de consultar la Solicitud Chequera");
            System.out.println(e.getMessage());
            error(e.getMessage());
        }
        return selects;
    }

    //----------------------------------------CUENTA
    public String agregarCuenta(){
        cuentaAAgregar = new Cuenta();
        if(bolAgregarCuenta == true){
        }else{
        bolAgregarCuenta = true;
        }
        return "agregarCuenta";
    }

    public String agregarCuentaSelect(){
        if(cuentaAAgregar != null){
            chequera.setFidPltCuenta(cuentaAAgregar);
        }else {
            info("No se agregado una Cuenta");
        }
        return "agregarCuentaSelect";
    }

    //----------------------------------------SOLICITUD CHEQUERA
    public String agregarSolicitudChequera(){
        solicitudChequeraAAgregar = new SolicitudChequera();
        if(bolAgregarSolicitudChequera == true){
        }else{
        bolAgregarSolicitudChequera = true;
        }
        return "agregarSolicitudChequera";
    }

    public String agregarSolicitudChequeraSelect(){
        if(solicitudChequeraAAgregar != null){
            chequera.setFidPltSolicitudChequera(solicitudChequeraAAgregar);
        }else{
            info("No se agregado una Solicitud Chequera");
        }
        return "agregarSolicitudChequeraSelect";
    }

    //-----Listar Cuentas por tipoCuentas = OrdenPago
    public List<Cuenta> getCuentasPorTipoCuenta(){
        try {
            return
                    cuentaDelegado.buscarCuentasPorTipoCuenta(TipoTipoCuenta.OrdenPago);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    //-------------GET Y SET
    public Chequera getChequera() {
        return chequera;
    }

    public void setChequera(Chequera chequera) {
        this.chequera = chequera;
    }

    public Cuenta getCuentaAAgregar() {
        return cuentaAAgregar;
    }

    public void setCuentaAAgregar(Cuenta cuentaAAgregar) {
        this.cuentaAAgregar = cuentaAAgregar;
    }

    public boolean isBolAgregarCuenta() {
        return bolAgregarCuenta;
    }

    public void setBolAgregarCuenta(boolean bolAgregarCuenta) {
        this.bolAgregarCuenta = bolAgregarCuenta;
    }

    public boolean isBolAgregarSolicitudChequera() {
        return bolAgregarSolicitudChequera;
    }

    public void setBolAgregarSolicitudChequera(boolean bolAgregarSolicitudChequera) {
        this.bolAgregarSolicitudChequera = bolAgregarSolicitudChequera;
    }

    public SolicitudChequera getSolicitudChequeraAAgregar() {
        return solicitudChequeraAAgregar;
    }

    public void setSolicitudChequeraAAgregar(SolicitudChequera solicitudChequeraAAgregar) {
        this.solicitudChequeraAAgregar = solicitudChequeraAAgregar;
    }

    public TipoTipoCuenta getTipoTipoCuenta() {
        return tipoTipoCuenta;
    }

    public void setTipoTipoCuenta(TipoTipoCuenta tipoTipoCuenta) {
        this.tipoTipoCuenta = tipoTipoCuenta;
    }

    public TipoCuenta getTipoCuenta() {
        return tipoCuenta;
    }

    public void setTipoCuenta(TipoCuenta tipoCuenta) {
        this.tipoCuenta = tipoCuenta;
    }



}
